home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 401-425 / disk_418 / moduladefs / mathlib0.mod < prev    next >
Text File  |  1992-05-06  |  4KB  |  202 lines

  1. (***************************************
  2.  * Name: MathLib0.MOD                  *
  3.  * Author: JSG                         *
  4.  * Purpose: Math Functions             *
  5.  ***************************************)
  6.  
  7. IMPLEMENTATION MODULE MathLib0;
  8.  
  9. CONST PI    = 3.1415;
  10.       TWOPI = 6.2831;
  11.  
  12. PROCEDURE SQRT(x: REAL): REAL;
  13.  
  14. VAR lb,ub,mid : REAL;
  15.     temp : REAL;
  16.  
  17. BEGIN
  18.   IF (x<0.0) THEN
  19.     RETURN -1.0;
  20.   ELSE
  21.     lb := 0.0;
  22.     ub := x;
  23.     mid := (lb+ub)/2.0;
  24.     temp := ABS(mid*mid-x);
  25.     WHILE (temp>0.0001) DO
  26.        IF mid*mid>x THEN ub := mid;
  27.        ELSE lb := mid; END;
  28.        mid := (lb+ub)/2.0;
  29.        temp := ABS(mid*mid-x);
  30.    END; (* WHILE *)
  31.  
  32.    RETURN mid;
  33.  
  34.   END; (* IF x>=0 *)
  35.  
  36. END SQRT;
  37.  
  38.  
  39.  
  40.  
  41. PROCEDURE SIN(x:REAL;VAR neg:BOOLEAN) : REAL;
  42.  
  43. VAR Deg,D2    : INTEGER;
  44.     sinx,temp : REAL;
  45.  
  46. BEGIN
  47.    WHILE x<0.0 DO
  48.      x := x + TWOPI;
  49.    END;
  50.    temp := 57.2958*x;
  51.      
  52.    Deg := TRUNC(temp);
  53.    Deg := Deg MOD 360;
  54.  
  55.    CASE Deg OF
  56.  
  57.        0..89  : D2 := Deg;
  58.                 neg := FALSE;
  59.  
  60.    | 90..179  : D2 := 180 - Deg;
  61.                 neg := FALSE;
  62.  
  63.    | 180..269 : D2 := Deg - 180;
  64.                 neg := TRUE;
  65.  
  66.    | 270..359 : D2 := 360 - Deg;
  67.                 neg := TRUE;
  68.  
  69.    END; (* CASE *)
  70.  
  71.    CASE D2 OF
  72.  
  73.      0 : sinx := 0.0000; |
  74.      1 : sinx := 0.0175; |
  75.      2 : sinx := 0.0349; |
  76.      3 : sinx := 0.0523; |
  77.      4 : sinx := 0.0698; |
  78.      5 : sinx := 0.0872; |
  79.      6 : sinx := 0.1045; |
  80.      7 : sinx := 0.1219; |
  81.      8 : sinx := 0.1392; |
  82.      9 : sinx := 0.1564; |
  83.     10 : sinx := 0.1736; |
  84.     11 : sinx := 0.1908; |
  85.     12 : sinx := 0.2079; |
  86.     13 : sinx := 0.2250; |
  87.     14 : sinx := 0.2419; |
  88.     15 : sinx := 0.2588; |
  89.     16 : sinx := 0.2756; |
  90.     17 : sinx := 0.2924; |
  91.     18 : sinx := 0.3090; |
  92.     19 : sinx := 0.3256; |
  93.     20 : sinx := 0.3420; |
  94.     21 : sinx := 0.3584; |
  95.     22 : sinx := 0.3746; |
  96.     23 : sinx := 0.3907; |
  97.     24 : sinx := 0.4067; |
  98.     25 : sinx := 0.4226; |
  99.     26 : sinx := 0.4384; |
  100.     27 : sinx := 0.4540; |
  101.     28 : sinx := 0.4695; |
  102.     29 : sinx := 0.4848; |
  103.     30 : sinx := 0.5000; |
  104.     31 : sinx := 0.5150; |
  105.     32 : sinx := 0.5299; |
  106.     33 : sinx := 0.5446; |
  107.     34 : sinx := 0.5592; |
  108.     35 : sinx := 0.5736; |
  109.     36 : sinx := 0.5878; |
  110.     37 : sinx := 0.6018; |
  111.     38 : sinx := 0.6157; |
  112.     39 : sinx := 0.6293; |
  113.     40 : sinx := 0.6428; |
  114.     41 : sinx := 0.6561; |
  115.     42 : sinx := 0.6691; |
  116.     43 : sinx := 0.6420; |
  117.     44 : sinx := 0.6947; |
  118.     45 : sinx := 0.7071; |
  119.     46 : sinx := 0.7193; |
  120.     47 : sinx := 0.7314; |
  121.     48 : sinx := 0.7431; |
  122.     49 : sinx := 0.7547; |
  123.     50 : sinx := 0.7660; |
  124.     51 : sinx := 0.7771; |
  125.     52 : sinx := 0.7880; |
  126.     53 : sinx := 0.7986; |
  127.     54 : sinx := 0.8090; |
  128.     55 : sinx := 0.8192; |
  129.     56 : sinx := 0.8290; |
  130.     57 : sinx := 0.8387; |
  131.     58 : sinx := 0.8480; |
  132.     59 : sinx := 0.8572; |
  133.     60 : sinx := 0.8660; |
  134.     61 : sinx := 0.8746; |
  135.     62 : sinx := 0.8829; |
  136.     63 : sinx := 0.8910; |
  137.     64 : sinx := 0.8988; |
  138.     65 : sinx := 0.9063; |
  139.     66 : sinx := 0.9135; |
  140.     67 : sinx := 0.9205; |
  141.     68 : sinx := 0.9272; |
  142.     69 : sinx := 0.9336; |
  143.     70 : sinx := 0.9397; |
  144.     71 : sinx := 0.9455; |
  145.     72 : sinx := 0.9511; |
  146.     73 : sinx := 0.9563; |
  147.     74 : sinx := 0.9613; |
  148.     75 : sinx := 0.9659; |
  149.     76 : sinx := 0.9703; |
  150.     77 : sinx := 0.9744; |
  151.     78 : sinx := 0.9781; |
  152.     79 : sinx := 0.9816; |
  153.     80 : sinx := 0.9848; |
  154.     81 : sinx := 0.9877; |
  155.     82 : sinx := 0.9903; |
  156.     83 : sinx := 0.9925; |
  157.     84 : sinx := 0.9945; |
  158.     85 : sinx := 0.9962; |
  159.     86 : sinx := 0.9976; |
  160.     87 : sinx := 0.9986; |
  161.     88 : sinx := 0.9994; |
  162.     89 : sinx := 0.9998; |
  163.     90 : sinx := 1.0000;
  164.   END; (* CASE *)
  165.  
  166.   RETURN sinx;
  167.  
  168. END SIN;
  169.  
  170.  
  171. PROCEDURE COS(x: REAL;VAR neg:BOOLEAN) : REAL;
  172.  
  173. VAR
  174.     cosx,temp : REAL;
  175.  
  176. BEGIN
  177.  
  178.   temp := 1.5708 - x;
  179.   WHILE temp< 0.0 DO
  180.     temp := temp + TWOPI;
  181.   END;
  182.   cosx := SIN(temp,neg);
  183.   RETURN cosx;
  184.  
  185. END COS;
  186.  
  187.  
  188. PROCEDURE TAN(x: REAL) : REAL;
  189.  
  190. VAR tanx,cosx,sinx : REAL;
  191.     neg1,neg2 : BOOLEAN;
  192.  
  193. BEGIN
  194.   sinx := SIN(x,neg1);
  195.   cosx := COS(x,neg2);
  196.   tanx := sinx/cosx;
  197.   RETURN tanx;
  198. END TAN;
  199.  
  200.  
  201. END MathLib0.
  202.